Fuel on the Fire

2016/08/21

Specific Factors

What are the factors that cause software to become unmanageable?

Luckily, the same factors are at play in other systems besides software. This allows us to develop a more comprehensive understanding of the problem, as well as adapt solutions from these other systems.

What other systems show this type of progression toward unmanageability? Consider these examples:

What do these have in common? First, they are all large. Second, they all have a lot of complexity. So, we can conclude that Size and Complexity are major factors. But, more interestingly, why? Why do these systems have a lot of complexity, and what do we mean by "large"?

Size

What is size? For our purposes, we will define size as:

Size = The number of entities comprising a system.

Complexity

What is complexity? The meaning tends to be a bit fuzzy:

In order to make headway, we need to do better than this. Here is a much more useful definition of complexity:

Complexity = The number of dependencies within a system.

This immediately explains why larger systems would tend to be more complex: Larger systems have the potential for more dependencies.

This also explains why older systems tend to be more complex: Older systems have had more time to accumulate both entities and dependencies.

So, it stands to reason: systems that are both old and large would tend to be the most complex - which takes us back to our original list:

All of these are both large and old, host a lot of dependencies - and are therefore complex.

Note: A benefit of these definitions for Size and Complexity is that they are suitable for mathematical treatment and analysis. Later, we will use this to examine the relationship between complexity and various methodologies for addressing it.

Software

How does this relate to software?

It turns out that software is the perfect environment to host complexity, because:

Interestingly, complexity is both the "Fuel" and the "Fire", which is why actions taken to fix "out of control systems" often have the opposite effect.

Next

This understanding of complexity points the way toward specific methodologies we can use to control it.

In following posts we will discuss these methodologies and ways to implement them incrementally and in a non-disruptive fashion.